package com.example.vote.flow.service;

import com.example.vote.flow.pojo.core.Principle;
import com.example.vote.flow.pojo.param.VoteTopicCreateParam;
import com.example.vote.flow.pojo.param.VoteTopicUpdateParam;
import com.example.vote.flow.pojo.vo.VoteTopicFullVO;
import com.example.vote.flow.pojo.vo.VoteTopicSimpleVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 投票主题服务接口，用于处理与投票主题相关的业务逻辑
 */
@Transactional
public interface IVoteTopicService {

    /**
     * 创建一个新的投票主题
     *
     * @param param     投票主题的创建参数，包含需要创建的投票主题的相关信息
     * @param principle 当前操作的用户信息
     */
    void create(VoteTopicCreateParam param, Principle principle);

    /**
     * 根据ID删除投票主题
     *
     * @param id        需要删除的投票主题的ID
     * @param principle 当前操作的用户信息
     */
    void deleteById(Long id, Principle principle);

    /**
     * 根据ID更新投票主题的信息
     *
     * @param id        需要更新的投票主题的ID
     * @param param     投票主题的更新参数，包含需要更新的投票主题的相关信息
     * @param principle 当前操作的用户信息
     * @return 更新影响的行数，用于确认更新操作是否成功
     */
    int updateById(Long id, VoteTopicUpdateParam param, Principle principle);

    /**
     * 根据ID查询投票主题的简要信息
     *
     * @param id 需要查询的投票主题的ID
     * @return 投票主题的简要信息视图对象
     */
    VoteTopicSimpleVO selectSimpleInfoById(Long id);

    /**
     * 根据ID查询投票主题的详细信息
     *
     * @param id 需要查询的投票主题的ID
     * @return 投票主题的详细信息视图对象
     */
    VoteTopicFullVO selectFullInfoById(Long id);

    /**
     * 查询所有的投票主题简要信息
     *
     * @return 包含所有投票主题简要信息视图对象的列表
     */
    List<VoteTopicSimpleVO> selectAll();

}
